package com.free.others;

import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

/**
 * <p>
 * Title: Eclipse Plugin Development
 * </p>
 * <p>
 * Description: Free download
 * </p>
 * <p>
 * mail: ganshm@gmail.com
 * </p>
 */

public class ClipboardExample
{
    
    public static void main(String[] args)
    {
        Display display = new Display();
        // 添加剪贴板对象
        final Clipboard cb = new Clipboard(display); // 共用系统的剪切板
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        final Text text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.WRAP); // 多行、边框、自动换行
        // 添加菜单
        Menu menu = new Menu(shell, SWT.POP_UP);
        // 添加Copy的菜单项
        final MenuItem copyItem = new MenuItem(menu, SWT.PUSH);
        // 设置菜单项文字
        copyItem.setText("Copy");
        
        copyItem.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                String selection = text.getSelectionText();
                if (selection.length() == 0)
                    return;
                // 获得选择的数据
                Object[] data = new Object[] {selection};
                // 获得平台文本类型和java文本类型的转换器
                Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
                // 设置剪贴板内容
                cb.setContents(data, types);
            }
        });
        // 添加paste的菜单项
        final MenuItem pasteItem = new MenuItem(menu, SWT.PUSH);
        pasteItem.setText("Paste");
        pasteItem.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                // 获得剪贴板的内容
                String string = (String)(cb.getContents(TextTransfer.getInstance()));
                // 插入剪贴板的内容
                if (string != null)
                    text.insert(string);
            }
        });
        menu.addMenuListener(new MenuAdapter()
        {
            public void menuShown(MenuEvent e)
            {
                // 判断Copy菜单项是否可用
                String selection = text.getSelectionText();
                copyItem.setEnabled(selection.length() > 0);
                // 判断paste菜单项是否可用
                TransferData[] available = cb.getAvailableTypes();
                boolean enabled = false;
                for (int i = 0; i < available.length; i++)
                {
                    if (TextTransfer.getInstance().isSupportedType(available[i]))
                    {
                        enabled = true;
                        break;
                    }
                }
                pasteItem.setEnabled(enabled);
            }
        });
        // 在文本区域添加菜单
        text.setMenu(menu); // 右键菜单
        
        shell.setSize(200, 200);
        shell.open();
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        cb.dispose();
        display.dispose();
    }
}
